# 匿名函数 + 高级函数
"""
匿名函数定义：
    lambda　参数列表：运算表达式
    可以接受任何参数，但是只能返回一个表达式的值
使用场景：高阶函数（一个函数的参数是另一个函数，俗称高阶函数）
    1. 匿名函数作为参数使用
    2. 系统高阶函数：max  min sorted
    3. filter（匿名函数要求返回bool类型，且bool 类型为真才是过滤）
    4. map：提取、加工数据，组成迭代
    5. reduce
    6. zip
"""
from functools import reduce


def su(a):
    return a + 1


print(su)
print(su(5))

r = lambda b: b + 1

print(r)
print(r(5))

print("匿名函数：使用场景->高级函数".center(30, "-"))


def test(n):
    print("-------test----->", n)


def func(a, f):
    print("----func---->", a)
    f(a)


func(6, test)

print("--------------------------------------------------")

print("-------------匿名函数作为参数使用------------")


def func1(a, f):
    print("++++++++++", a)
    print("=========>", f(a))


func1(5, lambda x: x ** 2)  # 匿名函数作为参数传递

print("-------------系统高阶函数------------")

lst = [("tom", 20), ("Tony", 23), ("rose", 30), ("Lily", 10)]

result = max(lst, key=lambda x: x[1])
print(result)
result = min(lst, key=lambda x: x[1])
print(result)

result = sorted(lst, key=lambda x: x[1])

print(result)
result = sorted(lst, key=lambda x: x[1], reverse=True)  # 从达到小

print(result)

result = filter(lambda x: x[1] > 18, lst)  # filter过滤

print(list(result))

result = map(lambda x: x[1] + 1, lst)  # map  映射，提取出来
print(result)
print(list(result))

result = map(lambda x: x[0].title(), lst)  # map  映射，提取，加工出来
print(result)
print(list(result))

resu = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])  # 就是一种运算

print(resu)

result = zip(lst)

print(result)
